/*
 * Copyright (c) 2022  by Junzhao
 * THIS FILE IS PART OF JAVA-Data-Structures-and-Algorithms PROJECT
 * All Rights Reserved.
 */

package 二叉树.前中后序遍历;

import 节点.Node;

/**
 * @Description 二叉树
 * 概念
 * 树有很多种，每个节点最多只能有两个子节点的一种形式称为二叉树。
 * 二叉树的子节点分为左节点和右节点。
 * <p>
 * 一个二叉树，如果每一个层的结点数都达到最大值，则这个二叉树就是满二叉树。
 * 也就是说，如果一个二叉树的深度为K，且结点总数是(2^k) -1 ，则它就是满二叉树。
 * <p>
 * 一棵深度为k的有n个结点的二叉树，对树中的结点按从上至下、从左到右的顺序进行编号，
 * 如果编号为i（1≤i≤n）的结点与满二叉树中编号为i的结点在二叉树中的位置相同，则这棵二叉树称为完全二叉树。
 * <p>
 * 重点讲解一下二叉树的前序遍历，中序遍历和后序遍历。
 * <p>
 * 前序遍历: 先输出父节点，再遍历左子树和右子树
 * 中序遍历: 先遍历左子树，再输出父节点，再遍历右子树
 * 后序遍历: 先遍历左子树，再遍历右子树，最后输出父节点
 * 小结: 看输出父节点的顺序，就确定是前序，中序还是后序
 * @Author 俊昭
 * @Date 2022/5/4
 */
public class BinaryTree {
    // 构造一个二叉树
    private static final Node root = new Node(1, "宋江");

    static {// 手动创建 暂时
        root.left = new Node(2, "卢俊义");
        root.right = new Node(3, "吴用");
        root.left.left = new Node(4, "公孙胜");
        root.left.right = new Node(5, "关胜");
        root.right.left = new Node(6, "林冲");
        root.right.right = new Node(7, "秦明");
    }

//    public static Node getRoot() {
//        return root;
//    }

    /**
     * @description 前序遍历
     * @author 俊昭
     * @date 2022/5/4
     */
    public static void preTraversal() {
        root.preTraversal();
    }

    /**
     * @description 中序遍历
     * @author 俊昭
     * @date 2022/5/4
     */
    public static void midTraversal() {
        root.midTraversal();
    }

    /**
     * @description 后序遍历
     * @author 俊昭
     * @date 2022/5/4
     */
    public static void postTraversal() {
        root.postTraversal();
    }

}
